package com.zhm.demo.json;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
import com.zhm.base.TestReq;

public class TestSchema {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // 创建一个 Person 实例并序列化为 JSON 字符串
        TestReq person = new TestReq();
        person.setA("John Doe");

        String jsonString = mapper.writeValueAsString(person);

        // 注意：这里我们实际上并没有直接从 Person 类生成 Schema，
        // 而是从它的 JSON 表示生成。但我们可以模拟这个过程。

        // 使用 jackson-module-jsonSchema 生成 JSON Schema
        // 但由于该模块通常不直接从 Java 对象生成 Schema，
        // 我们假设已经有一个 JSON 字符串或节点，并从这个生成 Schema。
        // 在实际使用中，你可能需要直接解析 Java 类以生成 Schema，
        // 这可能需要使用其他库或自定义逻辑。

        // 这里只是演示如何从 JSON 字符串生成 Schema（非直接）
        JsonNode jsonNode = mapper.readTree(jsonString);
        JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);
        JsonSchema schema = schemaGen.generateSchema(TestReq.class);

        // 输出生成的 JSON Schema
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema));

        // 注意：上面的代码实际上并没有直接从 Person 类生成 Schema，
        // 它只是展示了如何使用 jackson-module-jsonSchema 从一个 JSON 节点生成 Schema。
        // 对于直接从 Java 类生成 Schema，你可能需要查看其他库，如 json-schema-generator。

    }
}
